package com.hrbxlh.util;


import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * -------------------------------------------------------
 * Copyright (c) 2017, 鑫联华信息科技股份有限公司
 * All rights reserved.
 * FileName：pageUtil.java
 * Description：关于参数的修改等方法都用这个
 * History：
 * Date           Author               Desc
 * 2017.10.13	   xzx                 建立
 * -------------------------------------------------------
 */

public class ParamConvertUtil {

//    /**
//     * @description 批量转换输入数据中的html代码，信息方法，将script之类的进行去掉
//     * @param paramList
//     * */
//    public static List<String> replaceHTMLCode(List<String> paramList){
//        List<String> list = new ArrayList<String>();
//        try{
//            String paramStr="";
//            for(int i = 0; i < paramList.size(); i++){
//                paramStr = paramList.get(i);
//                paramStr = paramStr.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
//                paramStr = paramStr.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
//                paramStr = paramStr.replaceAll("'", "& #39;");
//                paramStr = paramStr.replaceAll("eval\\((.*)\\)", "");
//                paramStr = paramStr.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
//                paramStr = paramStr.replaceAll("script", "");
//                list.add(paramStr);
//            }
//        }catch(Exception e){
//            e.printStackTrace();
//        }
//        return list;
//    }

//    /**
//     * @description 批量转换输入数据中的html代码，信息方法，将script之类的进行去掉
//     * @param paramList
//     * @param key 字段值，取map中这个字段的key
//     * */
//    public static List<Map<String, Object>> replaceHTMLCode(List<Map<String, Object>> paramList, String key){
//        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
//        try{
//            Map<String, Object> paramStr = null;
//            String convertStr = "";
//            for(int i = 0; i < paramList.size(); i++){
//                paramStr = paramList.get(i);
//                convertStr = (String)paramStr.get(key);
//                convertStr = convertStr.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
//                convertStr = convertStr.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
//                convertStr = convertStr.replaceAll("'", "& #39;");
//                convertStr = convertStr.replaceAll("eval\\((.*)\\)", "");
//                convertStr = convertStr.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
//                convertStr = convertStr.replaceAll("script", "");
//                paramStr.put(key, convertStr);
//                list.add(paramStr);
//            }
//        }catch(Exception e){
//            e.printStackTrace();
//        }
//        return list;
//    }

//    /**
//     * @description 单个输入转换html代码信息方法，将script之类的进行去掉
//     * @param param
//     * */
//    public static String replaceHTMLCodeOne(String param){
//       String result = "";
//        try{
//            param = param.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
//            param = param.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
//            param = param.replaceAll("'", "& #39;");
//            param = param.replaceAll("eval\\((.*)\\)", "");
//            param = param.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
//            param = param.replaceAll("script", "");
//            result = param;
//        }catch(Exception e){
//            e.printStackTrace();
//        }
//        return result;
//    }

    /**
     * @description 将输入的参数中的字符串的问题进行特殊字符验证
     * @return true为包含，false为不包含
     * */
    public static boolean getSpecialWordMark(Map<String, Object> map){
        for (Object value : map.values()) {
            if(getMapDataSprcialMark(value)){
                return true;
            }
        }
        return false;
    }

    /**
     * @description 验证特殊字符的方法
     * @return true为包含，false为不包含
     * */
    public static boolean isSpecialChar(String str) {
        //"[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。，、？]|\n|\r|\t";
        String regEx = "[_`~@#$%^&*=|\\[\\]<>/~@#￥%……&*|【】]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.find();
    }

    /**
     * @description 验证某类的特殊字符，是否存在，限于string String[] List<String>
     * @return true 存在特殊字符  false不存在特殊字符
     * */
    public static boolean getMapDataSprcialMark(Object value){
        List<String> listClass = new ArrayList<String>();
        String[] arrClass = new String[1];
        String stringClass = "";
        Map<String, Object> map = new HashMap<String, Object>();
        LinkedHashMap<String, Object> lmap = new LinkedHashMap<String, Object>();
        //如果是集合
        if(value.getClass().equals(listClass.getClass())){
            for(Object arrPoint : (List<Object>)value){
                if(arrPoint == null){
                    continue;
                }
                //如果是字符串集合
                if(arrPoint.getClass().equals(stringClass.getClass()) ){
                   if(isSpecialChar(arrPoint.toString())){
                       return true;
                   }
                }
                //如果是map集合
                if(arrPoint.getClass().equals(map.getClass())){
                    for(Object valueI : ((Map<String, Object>)arrPoint).values()){
                        if(valueI.getClass().equals(stringClass.getClass())){
                            if(isSpecialChar(valueI.toString())){
                                return true;
                            }
                        }
                    }
                }
                //如果是linkedmap集合
                if(arrPoint.getClass().equals(lmap.getClass())){
                    for(Object valueI : ((LinkedHashMap<String, Object>)arrPoint).values()){
                        if(valueI.getClass().equals(stringClass.getClass())){
                            if(isSpecialChar(valueI.toString())){
                                return true;
                            }
                        }
                    }
                }
            }
        }
        //如果是字符串数组
        if(value.getClass().equals(arrClass.getClass())){
            for(String arrPoint : (String[])value){
                if(isSpecialChar(arrPoint)){
                    return true;
                }
            }
        }
        //如果是字符串
        if(value.getClass().equals(stringClass.getClass())){
            if(isSpecialChar(value.toString())){
                return true;
            }
        }
        return false;
    }

}